package WorkQueue;

import Utils.ConnectionFactoryUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.MessageProperties;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @ClassName Producer
 * @Description TDD
 * @Author 混沌酱
 * @Date 2023-10-09 14:43
 * @Version 1.0
 **/
public class Producer {

    // 定义队列名称
    private final static String QUEUE_NAME = "work_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
        // 1、建立工厂连接
        Connection connection= ConnectionFactoryUtil.getConnection();

        // 2、创建信道
        Channel channel = connection.createChannel();


        // 3、创建队列、并持久化
        /**
         * 参数1：队列名
         * 参数2：是否持久化，true表示MQ重启后队列还在。
         * 参数3：是否私有化，false表示所有消费者都可以访问，true表示只有第一次拥有它的消费者才能访问
         * 参数4：是否自动删除，true表示不再使用队列时自动删除队列（当没有消费者时，就自动删除）
         * 参数5：其他额外参数
         */
        channel.queueDeclare("work_queue", true, false, false, null);

        // 4、发送大量消息
        /**
         * 参数1：交换机名，""表示默认交换机
         * 参数2：路由键，队列名
         * 参数3：其他额外参数 表示该消息为持久化消息，即除了保存到内存还会保存到磁盘中
         * 参数4：要传递的消息字节数组
         */
        for (int i = 0; i < 30; i++) {
            channel.basicPublish("",QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN,
                    ("你好，你有新快递编号为："+i).getBytes());
        }

        // 6、关闭资源
        channel.close();
        connection.close();
    }
}
